/**
 * 登录和用户信息控制器
 */
import Config from '../config/Config';
import $ from 'jquery';

let userInfo = JSON.parse(localStorage.getItem('minicfm-user-info')) || {};

export default class User {
  /**
 * 获取内存中记录的用户信息
 * @returns {}
 */
  static getUserInfo() {
    return userInfo;
  }

  /**
   * 拉取服务器端的微信用户信息
   */
  static getWxUserInfoFromServer(code) {
    let promise = new Promise(function (resolve, reject) {
      // 携带在地址栏的code信息
      let APIUrl = Config.getAPIUrl('base_login');
      let jsonData = JSON.stringify({'code': code});

      if (Config.getUrlPara('isuserinfo')) {
        // 如果正在请求用户信息，则发送注册请求
        APIUrl = Config.getAPIUrl('userinfo_authorization');
        jsonData = JSON.stringify({'code': code});
      }

      $.ajax({
        url: APIUrl, // 授权登录
        data: jsonData,
        type: 'post',
        cache: false,
        contentType: 'application/json;charset=utf-8',
        dataType: 'json',
        headers: {
          Accept: 'application/json'
        },
        beforeSend: (request) => {
          request.setRequestHeader('X-iChangTou-Json-Api-Token', Config.getApiToken());
        },
        success: resolve,
        error: reject
      });
    })

    return promise;
  }

  /**
 * 请求微信数据后的回调函数
 * @param data
 */
  static onGetWxInfoSuccess(data) {
    if (!data || !data.userId) {
      // 如果后台没有数据，代表没有授权过，去往snsapi_userinfo授权
      User.redirectToUserinfo();
      return;
    }

    // 保存用户信息
    userInfo = {};
    userInfo.userId = data.userId;
    userInfo.sessionId = data.sessionId;
    userInfo.openId = data.openId;
    userInfo.nickName = data.nickName;
    if (userInfo.nickName && userInfo.nickName.length > 10) {
      userInfo.nickName = userInfo.nickName.substr(0, userInfo.nickName.length - 6);
    }

    userInfo.headImage = data.headImage;

    userInfo.subscribe = data.subscribe; // 是否关注公众号

    // 缓存
    localStorage.setItem('ict48-user-info', JSON.stringify(userInfo));
    localStorage.setItem('FINISH_LOGIN', 'true');
    console.log('正常登陆 将用户信息做缓存');
    // let Util = require('./Util');
    // 触发授权登录成功
    // OnFire.fire('OAUTH_SUCCESS', userInfo);

    // Config.postMango({eventName: 'Login_success', nickname: userInfo.userId});

    // 统计
    // Config.postCnzzData('用户登录');
  }

  /**
 * 获取微信数据失败
 */
  static onGetWxInfoError(data) {
    console.log('onGetWxInfoErrorData', data);
    User.redirectToUserinfo();
  }
  /**
 * 重定向到微信的静默授权页面
 */
  static redirectToBaseInfo() {
    if (Config.getDebugFlag()) {
      console.log('2-1', Config.getDebugFlag());

      return;
    }
  }
  /**
 * 重定向到微信的userInfo授权（会弹出绿色的授权界面）
 */
  static redirectToUserinfo() {
    console.log('5');
    if (!Config.isWeixin()) {
      // QQ中打开不跳转
      return;
    }
    console.log('5-1');

    // 不带code的话，强制去静默授权
    let redirectUri = Config.getRedirectUri(true);
    let scope = 'snsapi_userinfo'; // snsapi_userinfo;
    console.log('5-2');
    // 记录请求次数，超过3次，则不再请求
    let errCounter = 0;
    if (localStorage.getItem('userInfoErrCounter')) {
      errCounter = parseInt(localStorage.getItem('userInfoErrCounter'));
    }
    if (errCounter > 3) {
      localStorage.removeItem('userInfoErrCounter');
      // OnFire.fire('OAUTH_FAIL');
      return;
    } else {
      localStorage.setItem('userInfoErrCounter', errCounter + 1);
    }

    let url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + Config.getAppId() + '&redirect_uri=' + redirectUri + '&response_type=code' + '&scope=' + scope + '&state=minic#wechat_redirect';
    console.log('5-3');

    console.log('url2', url);
    location.href = url;
  }
}
